关于hibernate <set>标签的问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 17:01:47
<hibernate-mapping>
<class name="com.hibernate.Users" table="users">
<set name="Books" inverse="true" cascade="all">
<key>
<column name="userId" />
</key>
<one-to-many class="com.hibernate.Books" />
</set>
...
</class>
</hibernate-mapping>
请问上述标签中
<key>
<column name="userId" />
</key>
1.userId是两个表中都要有吗?
2.userId是两个表中都要叫一个名字吗?不同不行吗?
那比如说users表中主键是id,books表中主键是userId那么我在<column name="?" />?号写谁呢?

你这是一对多的关系
其实你这个问题是不能这样问的
例如你的user表是这样的
id int
username varchar
usersex varchar
而你的books表应该象这样的
id int
userid int
bookname varchar
这个时候books表的userid对应user表的id
所以你在配置文件里面就应该这样写

<key>
<column name="userId" />
</key>
//指的是用books表的userid 和user表的id对应关联
<column name="?" />?写子表的关联字段 即userid

如果你非要把userid做books表的主键 那就是一对一的关系
所以books表的主键生成就要改成
<generator class="foreign"/>

答:
1.是两个表都要有,因为这样才可以把两个表关联起来
2.都要叫同一个名字,不可以不同,因为userid源于user表,在books表里面只不过是引用了user表里面的userid字段,从本质上来说,同一条记录,它里面的内容是唯一的,在两个表内也是一致的
3.如果users表里面的主键是id,books表的主键是userid,应该写
<set name="books" inverse="true" cascade="all">
<key>
<column name="id"/>
</key>
<one-to-many class="com.hibernate.books"/>